---
layout: docs
page_title: scaling block in the job specification
description: The `scaling` block allows specifying scaling policy for a task group
---

# `scaling` block in the job specification

<Placement
  groups={[
    ['job', 'group', 'scaling'],
    ['job', 'group', 'task', 'scaling'],
  ]}
/>

The `scaling` block allows configuring scaling options for a `task` or a
`group`, for the purpose of supporting external autoscalers like the
[Nomad Autoscaler](https://github.com/hashicorp/nomad-autoscaler) and scaling
via the Nomad UI. This block is not supported within jobs of type `system`.

When placed at the `group` level, the scaling policy will be of type
[horizontal application scaling][horizontal_app_scaling], controlling the value
of [`count`][] for the group.

```hcl
job "example" {
  datacenters = ["dc1"]

  group "cache" {
    count = 1

    scaling {
      enabled = true
      min     = 0
      max     = 10

      policy {
        # ...
      }
    }
    # ...
  }
}
```

When placed at the `task` level, the scaling policy will be of type
[Dynamic Application Sizing][das], controlling the [`resources`][] values of
the task. In this scenario, the `scaling` block must have a label indicating
which resource will be controlled. Valid names are `cpu` and `mem`.

```hcl
job "example" {
  datacenters = ["dc1"]

  group "cache" {
    task "redis" {
      driver = "docker"

      config {
        image = "redis:7"
      }

      resources {
        cpu    = 100
        memory = 256
      }

      scaling "cpu" {
        enabled = true
        min     = 100
        max     = 500

        policy {
          # ...
        }
      }

      scaling "mem" {
        enabled = true
        min     = 64
        max     = 512

        policy {
          # ...
        }
      }
    }
  }
}
```

## Parameters

- `min` - <code>(int: nil)</code> - The minimum acceptable count for the task group.
  This should be honored by the external autoscaler. It will also be honored by Nomad
  during job updates and scaling operations. Defaults to the specified task group [`count`][].

- `max` - <code>(int: &lt;required&gt;)</code> - The maximum acceptable count for the task group.
  This should be honored by the external autoscaler. It will also be honored by Nomad
  during job updates and scaling operations.

- `enabled` - <code>(bool: false)</code> - Whether the scaling policy is enabled.
  This is intended to allow temporarily disabling an autoscaling policy, and should be
  honored by the external autoscaler.

- `policy` - <code>(map<string|...>: nil)</code> - The autoscaling policy. This is
  opaque to Nomad, consumed and parsed only by the external autoscaler. Therefore,
  its contents are specific to the autoscaler; consult the
  [Nomad Autoscaler documentation][autoscaling_policy] for more details.

[autoscaling_policy]: /nomad/tools/autoscaling/policy
[`count`]: /nomad/docs/job-specification/group#count 'Nomad Task Group specification'
[`resources`]: /nomad/docs/job-specification/task#resources 'Nomad Task specification'
[das]: /nomad/tools/autoscaling#dynamic-application-sizing
[horizontal_app_scaling]: /nomad/tools/autoscaling#horizontal-application-autoscaling
